package com.neuedu.javase.io;

import java.io.File;
import java.io.IOException;

/***
 * 项目名称:  MyJavaSE 
 * 包：  com.neuedu.javase.io 
 * date:   2025/11/5   14:51  
 * 描述:  
 *  @author : 张金山
 *  作者博客:   https://blog.fulfill.com.cn
 */
public class MyFile {

    public static void main(String[] args) throws IOException {
        //File 代表文件、文件夹的 对应引用

        //构造对象

        File dir = new File("D:\\upload");

        // public File(String pathname) {
        // File file = new File("D:\\upload\\a.txt");


        // File file = new File("D:\\upload\\a.txt");

        // public File(String parent, String child) {
        File file1 = new File("D:\\upload","a.txt");


        // public File(File parent, String child) {
        File file2 = new File(dir,"a.txt");



        //访问  文件属性  （暂时不能访问内容）


        //是否是文件、 文件夹
        boolean directory = dir.isDirectory();
        boolean isFile = file1.isFile();
        System.out.println("dir.isDirectory() = " + dir.isDirectory());  //都是文件夹
        System.out.println("file1.isFile() = " + file1.isFile());    //都是文件夹



        File  dir2 = new File("D:\\abc");
        boolean exists = dir2.exists();
        System.out.println("dir2.exists() = " + dir2.exists());  //false  不存在路径
        if(!dir2.exists()){
            boolean success = dir2.mkdir();
            System.out.println(dir2.getAbsoluteFile()+"     目录不存在,执行创建，结果："+success);

        }else{
            System.out.println(dir2.getAbsoluteFile()+"目录存在,");
        }

        //D:\def\a.txt
        File   notepad = new File("D:\\def\\a\\b\\c","a.txt");

        // 获取上一级目录

        //字符串表示的上一级目录
        String parent = notepad.getParent();
        //字符串表示的上一级目录
        File parentFile = notepad.getParentFile();

        if(!parentFile.exists()){
            // parentFile.mkdir();   //创建一级目录
            parentFile.mkdirs();  //创建多级目录
        }




        if(!notepad.exists()){
            try {
                //如果文件上级目录不存在，直接 createNewFile 会失败
                boolean success = notepad.createNewFile();
                System.out.println(notepad.getAbsoluteFile()+"    文件不存在创建文件"+success);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }else{
            System.out.println(notepad.getAbsoluteFile()+"    文件已存在无需创建");

        }



        //文件的属性
        File movieDir = new File("D:\\23级\\课程\\05-JavaSE");

        // String[] list = movieDir.list();
        File[] files = movieDir.listFiles();
        for (File file : files) {
            String name = file.getName();
            long lastModified = file.lastModified();
            boolean canRead = file.canRead();    //   R W X
            boolean canWrite= file.canWrite();
            boolean canExecute = file.canExecute();
            long length = file.length();
            System.out.printf("name: %s\tlastModified:%d\tcanRead:%s\tcanWrite:%s\tcanExecute:%s\tlength:%dM\r\n ",
                    name,lastModified,canRead,canWrite,canExecute,length/1024/1024);


        }


        File   notepad1 = new File("D:\\def\\a\\b\\c","a.txt");
        if(notepad1.exists()){
           boolean success =  notepad1.delete();
            System.out.println("删除状态 success = " + success);
        }else{
            System.out.println("文件不存在  ");
        }



        File fileOnMemmory = new File("D:\\def\\a\\b\\c","a.txt");
        if(!fileOnMemmory.getParentFile().exists()){
            fileOnMemmory.mkdirs();  //创建多级目录
        }
        if(!fileOnMemmory.exists()){
            fileOnMemmory.createNewFile();
        }


        //当虚拟机 退出的时候才会删除，不是立即删除
        fileOnMemmory.deleteOnExit();
        System.out.println("===指定代码");
        System.out.println("===指定代码");
        System.out.println("===指定代码");
        System.out.println("===指定代码");
        System.out.println("===指定代码");



        //rename
        File f1 = new File("D:\\upload","a.txt");
        f1.getParentFile().mkdirs();
        f1.createNewFile();


        // File f2 = new File("D:\\upload","b.txt");
        // f1.renameTo(f2);

        //间接实现复制的功能
        File f3 = new File("D:\\abc","b.txt");
        f1.renameTo(f3);




    }
}
